/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.agi.fs;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author renato.grosz
 */
public class Diretorio extends ObjetoPersistente{
    
    private Set <Diretorio> subDiretorios;
    private Diretorio diretorioSuperior;
    public Diretorio(String nome) {
        subDiretorios=new HashSet<Diretorio>();
        super.nome=nome;
        this.diretorioSuperior=this;
    }

    public void setDiretorioSuperior(Diretorio diretorioSuperior){
        this.diretorioSuperior=diretorioSuperior;
    }

    public Diretorio getDiretorioSuperior(){
        return(diretorioSuperior);
    }

    public Diretorio criarDiretorio(String nome) throws IOException{
        Diretorio retorno;
        retorno=new Diretorio(nome);
        retorno.setDiretorioSuperior(this);
        if(!subDiretorios.add(retorno)){
           throw new IOException("Diretorio ja existe");
        }
        return(retorno);
    }

    

    public void removerDiretorio(String nome) throws IOException {
        Diretorio diretorio;
        boolean existeDiretorio;
        diretorio=null;
        for(Diretorio d: subDiretorios){
            if(d.nome.equals(nome)){
                diretorio=d;
                break;
            }
        }

        existeDiretorio=diretorio!=null;

        if(!existeDiretorio){
            throw new FileNotFoundException("Diretorio nao existe");
        }else{
            if(diretorio.aberto){
                throw new IOException("Diretorio está em uso");
            }else{
                if(!subDiretorios.remove(diretorio)){
                    throw new IOException("Impossível remover diretorio - erro desconhecido");
                }
            }
        }
    }

    public Diretorio getDiretorio(String dirName) throws FileNotFoundException {
        Diretorio diretorio=null;
        for(Diretorio d: subDiretorios){
            if(d.nome.equals(dirName)){
                diretorio=d;
                break;
            }
        }
        if(diretorio==null){
            throw new FileNotFoundException("Diretorio nao existe");
        }
        return(diretorio);
    }



    


}
